import Vue from 'vue';
import Vuex from 'vuex';
import $H from '../common/request.js';

Vue.use(Vuex)

export default new Vuex.Store({
	state: {
		user:false,
		token:false
	},
	actions: {
		// 登录 Promise写法
		// 因为对缓存操作也可能会产生异常，而actions又是异步操作，因此需要采用Promise写法
		login({state},user){
			return new Promise((resolve, reject) => {
				try{
					state.user = user;
					state.token = user.token;
					uni.setStorageSync('user',JSON.stringify(user))
					resolve(user);
				}
				catch(err){
					reject(err);
				}
			})
		},
		
		//初始化用户登录状态
		initUser({state}){
			let user = uni.getStorageSync('user');
			if(user){
				user = JSON.parse(user);
				state.user = user;
				state.token = user.token;
			}
		},
		
		//退出登录状态，注意由于设计到调用服务器API，因此必须要写成Promise形式
		logout({state}){
			return new Promise( (resolve, reject) => {
				try{
					$H.post('/logout',{},{token:true})
					let user = state.user;
					state.user = false;
					state.token = false;
					uni.removeStorageSync('user');
					resolve(user);
				}
				catch(err){
					reject(err);
				}
			})
		}
	}
}) 